#include "TableSymboles.h"

/*! \file TableSymboles.cc
    \brief L'implementation de la classe TableSymboles
   
    Définit les méthodes associées à la classe TableSymboles
    \author Inconnu
    \date 19.12.2012
 */

////////////////////////////////////////////////////////////////////////////////

/*! \fn TableSymboles()
    \brief Constructeur de la classe TableSymboles.

    Appelle le constructeur de la classe table et construit une TableSymboles vide
*/

TableSymboles::TableSymboles():table()
// Construit une table des symboles valués vide
{
}

////////////////////////////////////////////////////////////////////////////////

/*! \fn entier(short min, short max)
    \brief Constructeur de la classe entier.

    Si le symbole n'existe pas déjà dans la table, on l'ajoute 
    et on renvoie un pointeur sur le nouveau symbole valué inséré.
    \param s - le symbole trouvé
*/

SymboleValue * TableSymboles::chercheAjoute (Symbole s)
{
  vector<SymboleValue*>::iterator i;

  i=table.begin();
  while (i<table.end() && (**i).getChaine() < s.getChaine()) i++;
  if (i==table.end() || (**i).getChaine() != s.getChaine()) // si pas trouvé...
    i=table.insert(i, new SymboleValue(s));
  return *i;
}




////////////////////////////////////////////////////////////////////////////////


/*! \brief La definition de l'operateur <<

    Affiche via cout le contenu du symbole
*/
ostream & operator << (ostream & cout, TableSymboles ts)
// affiche ts sur cout
{
  
  cout << endl << "Contenu de la Table des Symboles Values :" << endl
       <<         "=========================================" << endl << endl;
  for (unsigned int i=0; i<ts.table.size(); i++)
    cout << "  " << *(ts.table[i]) << endl;
  cout << endl;
 
  return cout;
}
